package com.elitel.common.core.advice;


import com.elitel.common.core.domain.JsonResult;
import com.elitel.common.core.exception.GlobalException;
import org.springframework.http.HttpStatus;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

/**
 * 该注解为统一异常处理的核心
 * <p>
 * 是一种作用于控制层的切面通知（Advice），该注解能够将通用的@ExceptionHandler、@InitBinder和@ModelAttributes方法收集到一个类型，并应用到所有控制器上
 */
@ControllerAdvice
public class GlobalExceptionHandlerAdvice {

    /**
     * -------- 通用异常处理方法 --------
     **/
    @ExceptionHandler(GlobalException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.OK)
    public JsonResult error(GlobalException e) {
        if (!ObjectUtils.isEmpty(e.getData())){
            return JsonResult.errorAddData(e.getMessage(), e.getCode(), e.getData());    // 通用异常结果
        }
        return JsonResult.error(e.getMessage(), e.getCode());    // 通用异常结果
    }



}
